﻿using Servicios.Calificaciones.Helpers;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace Servicios.Calificaciones.Controllers
{
    public class ReportesController : ApiController
    {
        //[HttpGet]
        //[Route("api/reportes/{reportName}/{formato}/{idCurso}")]
        //public HttpResponseMessage Get(string reportName, string formato, int idCurso)
        //{
        //    var reporte = new ReportGenerator();
        //    string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
        //    var result = new HttpResponseMessage(HttpStatusCode.OK);

        //    try
        //    {

        //        Dictionary<string, string> parameters = new Dictionary<string, string>();

        //        parameters.Add("Curso", idCurso.ToString());
                

        //        result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato, 
        //            parameters, reportName, rutaArchivosTemporales);
        //    }
        //    catch (Exception e)
        //    {
        //        Debugger.Log(1, "Error", e.Message + e.StackTrace);
        //        //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
        //    }

        //    return result;

        //}
        [HttpGet]
        [Route("api/reportes/calificacionescurso/{formato}/{idCurso}")]
        public HttpResponseMessage Get(string formato, int idCurso)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();

                parameters.Add("Curso", idCurso.ToString());


                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteCalificacionesCurso", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }

        [HttpGet]
        [Route("api/reportes/habilidadesestudiante/{formato}/{idCurso}/{idEstudiante}")]
        public HttpResponseMessage GetHE(string formato, int idCurso, int idEstudiante)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();

                parameters.Add("Curso", idCurso.ToString());
                parameters.Add("Estudiante", idEstudiante.ToString());


                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteHabilidadesEstudiante", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }
        [HttpGet]
        [Route("api/reportes/calificacionesestudiante/{formato}/{idEstudiante}/{idCurso}")]
        public HttpResponseMessage GetCE(string formato, int idEstudiante, int idCurso)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("Estudiante", idEstudiante.ToString());
                parameters.Add("Curso", idCurso.ToString());
                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteCalificacionesEstudiante", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }
        [HttpGet]
        [Route("api/reportes/examenesestudiante/{formato}/{idEstudiante}/{idCurso}")]
        public HttpResponseMessage GetEE(string formato, int idEstudiante, int idCurso)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("Estudiante", idEstudiante.ToString());
                parameters.Add("Curso", idCurso.ToString());
                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteExamenesEstudiante", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }
        [HttpGet]
        [Route("api/reportes/periodoestudiantes/{formato}/{idPeriodo}/{idCurso}")]
        public HttpResponseMessage GetPE(string formato, int idPeriodo, int idCurso)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("Periodo", idPeriodo.ToString());
                parameters.Add("Curso", idCurso.ToString());
                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteEstudiantesPromovidos", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }
        [HttpGet]
        [Route("api/reportes/listaestudiantes/{formato}/{idCurso}")]
        public HttpResponseMessage GetLE(string formato, int idCurso)
        {
            var reporte = new ReportGenerator();
            string rutaArchivosTemporales = ConfigurationManager.AppSettings["RutaArchivosTemporales"];
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {

                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("Curso", idCurso.ToString());
                result = reporte.CallReportGenerator(ConfigurationManager.AppSettings["ReportServerPath"], formato,
                    parameters, "ReporteEstudiantesCurso", rutaArchivosTemporales);
            }
            catch (Exception e)
            {
                Debugger.Log(1, "Error", e.Message + e.StackTrace);
                //loggingService.LogError(string.Format("ERROR: {0}, STACKTRACE: {1}, INNER EXCEPTION: {2} ", e.Message, e.StackTrace, e.InnerException));
            }
            return result;

        }
    }
}
